Datadog Synthetic モニタリング(外形監視)をプライベートロケーションからやってみた
こんにちは。テクニカルサポートチームのShiinaです。
はじめに
URL 監視、ポート監視をはじめ、最近ではブラウザテストを利用したアプリケーション動作の監視(外形監視)を行う機会が増えてきていると思います。
Datadog Synthetic モニタリングのプライベートロケーションを利用すると、内部向けのアプリケーションやインターネットからアクセスできないプライベートのエンドポイントに対して監視を行うことができます。
今回はプライベートロケーションから Datadog Synthetic モニタリングを利用して、プライベートサブネット上に構築した Webサーバの URL 監視、RDS のポート監視およびブラウザテストをやってみました。
Datadog Synthetic モニタリングとは
バックエンドからフロントエンドまでシステムとアプリケーションがどのように実行されているか追跡、観察することができる Datadog のモニタリング機能です。
HTTP、SSL、DNS、WebSocket、TCP、UDP、ICMP、gRPC をサポートしています。
Web ページと API のパフォーマンス測定も可能です。
プライベオートロケーションとは
Synthetic モニタリングテストを行う専用の環境です。
Synthetic モニタリングは Datadog のサイトごとのいくつかのパブリックなロケーションからインターネットを通じてテストが行われますが、プライベートロケーションを利用するとプライベート環境からプライベートな通信のみでテストができます。
プライベオートロケーションワーカーとは
プライベオートロケーションを提供する Docker コンテナまたは WindowsOS サービスです。
Synthetic モニタリングテスト構成の取得、テスト結果の送信をアウトバウンド通信で行います。
プライベートロケーションワーカーは下記のエンドポイントと通信を行う必要があります。
- intake.synthetics.datadoghq.com
現時点では AWS PrivateLink のエンドポイント提供がないため、NAT ゲートウェイやプロキシサーバを用意して通信経路を確保する必要があります。
設定の流れ
はじめにプライベートサブネット上に Window の EC2 インスタンスを用意し、専用のプライベオートロケーションワーカーをインストールして、プライベートロケーションを設定します。
設定したプライベートロケーションを利用して Datadog Synthetic モニタリングで URL 監視、RDS ポート監視、ブラウザテストの設定を行います。
構成
- プライベオートロケーションワーカー
WindowsServer 2022 (datadog-synthetics-worker-1.50.0) - URL、ブラウザテスト監視対象
Amazon Linux 2023 (Nginx) - ポート監視対象
Amazon RDS for MySQL
プライベートロケーション設定
プライベートロケーションは Datadog コンソールからセットアップを行います。
今回はプライベートロケーションワーカーは Windows サービスを利用しました。
1)WindowsServer の AMI を利用して EC2 インスタンスをプライベートサブネットに作成しておきます。
2)Datadog コンソールの Digital Experience メニューより「Synthetic Monitoring & Testting」の「Settings」をクリックします。
3)メニューより「Private Locations」を選択し、「Add Private Location」をクリックします。
4)任意の Name を入力後、API Key をプルダウンから選択の上、「Save Location and Generate Configuration File」をクリックします。
5)JSON タブをクリックし、表示された configuration file をコピーボタンをクリックし、「View Installation Instructions」へ進みます。
ワーカー環境のセットアップに利用するため、クリップボードにコピーした JSON は worker-config.json というファイルに保存しておきます。
6)Install your private location では Windows のロゴを選択し、Command Line タブをクリックし、表示される手順に従いワーカー環境セットアップを進めていきます。
7)WindowsServer のEC2インスタンスでインストーラーによるインストールが完了するまで待ちます。
8)無事にセットアップが成功するとステータスが OK と表示されます。
ステータスが OK の表示となったら「OK」クリックしてセットアップを完了させます。
以上でプライベートロケーション設定は完了です。
Synthetic モニタリング設定
URL 監視(HTTP テスト)設定
1)Datadog コンソールの Digital Experience メニューより「Synthetic Monitoring & Testting」の「New Test」をクリックします。
2)「API Test」をクリックします。
3)設定値を入力の上、「Create」をクリックします。
今回は以下のような設定を行いました。
設定項目 | 設定値 | 補足 |
---|---|---|
Choose request type | HTTP | |
Method | GET | リクエストメソッドを指定します |
URL | http://ip-xx-x-x-xx.ap-northeast-1.compute.internal | 監視対象 Web サーバのプライベート DNS 名を指定します |
Name | Test on private web | |
Define assertions | status code is 200 | レスポンスコード 200 を成功とします |
Select locations | Private Locations | 作成済みのプライベートロケーション名を選択します |
Define scheduling and alert conditions | 1m | 1分毎にチェックを行います |
4)「Save」をクリックします。
ポート監視(TCP テスト)設定
1〜2)までは HTTP テスト手順と同様です。
3)設定値を入力の上、「Create」をクリックします。
今回は以下のような設定を行いました。
設定項目 | 設定値 | 補足 |
---|---|---|
Choose request type | TCP | |
Host | Host:private-database.xxxxxxx.ap-northeast-1.rds.amazonaws.com | 監視対象 RDS のプライベート DNS 名を指定します |
Port | 3306 | 監視対象 RDS のポート番号を指定します |
Name | Test on private database | |
Define assertions | connection is established | TCPセッション接続が確立できたことを成功とします |
Select locations | Private Locations | 作成済みのプライベートロケーション名を選択します |
Define scheduling and alert conditions | 1m | 1分毎にチェックを行います |
4)「Save」をクリックします。
ブラウザテスト設定
1)Datadog コンソールの Digital Experience メニューより「Synthetic Monitoring & Testting」の「New Test」をクリックします。
2)「API Test」をクリックします。
3)設定値を入力の上、「Create」をクリックします。
今回は以下のような設定を行いました。
設定項目 | 設定値 | 補足 |
---|---|---|
Starting URL | http://ip-xx-x-x-xx.ap-northeast-1.compute.internal | 監視対象 Web サーバのプライベート DNS 名を指定します |
Browsers & Devives | Edge | ブラウザテストに利用したいブラウザとデバイスを指定します |
Select locations | Private Locations | 作成済みのプライベートロケーション名を選択します |
Define scheduling and alert conditions | 5m | 5分毎にチェックを行います |
4)「Save & Edit Recording」をクリックします。
5)テストのレコーディングを行い、「Save & Launch」をクリックします。
Chrome もしくは Edge の拡張機能をインストールの上、Record ボタンをクリックすることでDatadog コンソール上からテストしたい操作を簡単にレコーディングすることができます。
モニタリング結果の確認方法
1)Datadog コンソールの Digital Experience メニューより「Synthetic Monitoring & Testting」の「Tests」をクリックします。
2)登録済みのテストシナリオ一覧より STATUS フィールドを確認します。
ステータスが OK となっていれば監視対象は正常な状態です。
アラート発生時の挙動
Web サーバの EC2 インスタンスと RDS インスタンスをそれぞれ停止してアラートを発生させてみます。
しばらくすると STATUSフィールの値が OK から ALERT に変化します。
また、Last Run の結果を確認するとテストに失敗したことがわかります。
プライベオートロケーションワーカー停止時の挙動
テストを行っているプライベオートロケーションワーカーが停止したらどうなるでしょうか。
結論としては STATUSは NODATA となりました。
実際にプライベオートロケーションワーカーのサービスを起動している WindowsServer の EC2 インスタンスを停止して挙動を確認してみました。
しばらくすると STATUSフィールの値が OK から NODATA に変化します。
監視元からデータが送信されてこないため、Datadog はデータなし(NODATA)と判断する挙動のようです。
パフォーマンスの確認方法
Datadog Synthetic モニタリングではパフォーマンスも測定することができます。
プライベートロケーションからでも同様に確認することが可能です。
1)Datadog コンソールの Digital Experience メニューより「Synthetic Monitoring & Testting」の「Explorer」をクリックします。
2)テスト結果一覧からパフォーマンスを確認したいテスト結果をクリックします。
3)Test Details より DNS、Connection、Download それぞれに要したレスポンスタイムを確認できます。
まとめ
内部向けのアプリケーションやインターネットからアクセスできないプライベートのエンドポイントに対して監視はプライベートサブネット内に Datadog エージェントを導入した EC2インスタンスから HTTP チェック、TCP チェックを利用した外形監視も行うことができますが conf.yaml の設定や管理などの運用が必要でした。
Datadog Synthetic モニタリングのプライベートロケーションを利用すると外形監視の設定はコンソール上から行え、設定の取り込みは自動的にワーカーが行ってくれます。
管理や運用面では Datadog エージェントから外形監視を行う点よりも優れていると思います。
プライベートロケーションワーカーが1つの場合、SPOF になってしまうので、複数のプライベートロケーションを作成の上、複数のプライベートロケーションからモニタリングを行うなど冗長化の面は検討する必要があります。
最後までご覧いただきありがとうございました。
本記事が誰かのお役に立てれば幸いです。
参考